package locations.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

@Entity
@Table
public class Pacient extends Persona implements Serializable {

    private static final long serialVersionUID = -8635731102423392639L;
    @OneToOne(cascade = CascadeType.ALL)
    private HistoriaSocial historiaSocial;
    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "location_id")
    protected Location location;
    @OneToMany(cascade = CascadeType.ALL)
    private Collection<Practica> practicas;
    private String condicionesHabitacionales;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaNacimiento;

    public Pacient() {
        this.practicas = new ArrayList<Practica>();
        this.setHistoriaSocial(new HistoriaSocial());
    }

    public Location getLocation() {
        return location;
    }

    public void setLocation(Location location) {
        this.location = location;
    }

    public boolean isNew() {
        return this.getId() == null;
    }

    public String toString() {
        return this.getNombre() + "," + this.getApellido();
    }

    public HistoriaSocial getHistoriaSocial() {
        return historiaSocial;
    }

    public void setHistoriaSocial(HistoriaSocial historiaSocial) {
        this.historiaSocial = historiaSocial;
        historiaSocial.setPaciente(this);
    }

    public String getName() {
        return this.getNombre();
    }

    public Collection<Practica> getPracticas() {
        Collection<Practica> aux = new ArrayList<Practica>();
        for (Practica each : this.practicas) {
            if (each.getValido()) {
                aux.add(each);
            }
        }

        return aux;
    }

    public void setPracticas(Collection<Practica> practicas) {
        this.practicas = practicas;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public void addPractica(Practica practica) {
        this.practicas.add(practica);
        practica.setPaciente(this);
    }

    public String getCondicionesHabitacionales() {
        return condicionesHabitacionales;
    }

    public void setCondicionesHabitacionales(String condicionesHabitacionales) {
        this.condicionesHabitacionales = condicionesHabitacionales;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }
}
